package cn.tsmchina.one.util;

import java.security.MessageDigest;

public class MD5Util {
	private final static String[] hexDigits = {"0", "1", "2", "3", "4",
		 "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
	
	/**
	 * 对inputString进行加密
	 * @param inputString
	 * @return
	 */
	public static String generatePassword(String inputString){    
		 return encodeByMD5(inputString);
	}
	
	/**
	 * 验证密码
	 * @param encodePassword
	 * @param inputString
	 * @return
	 */
	public static boolean validatePassword(String encodePassword, String inputString){    
		System.out.println(encodePassword); 
		System.out.println(inputString); 
		if(encodePassword.toLowerCase().equals(encodeByMD5(inputString).toLowerCase())){    
			 return true;
		 }else{
			 return false;
		 }
	}
	
	/**
	 * 对字符串进行MD5加密
	 * @param originString
	 * @return
	 */
	public static String encodeByMD5(String originString) {
		if (originString != null) {
			try {
				MessageDigest md = MessageDigest.getInstance("MD5");
				// 使用指定的字节数组对摘要进行最后更新，然后完成摘要计算
				byte[] results = md.digest(originString.getBytes());
				// 将得到的字节数组变成字符串返回
				String resultString = byteArrayToHexString(results);
				String pass = resultString.toUpperCase();
				return pass;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return null;
	}
	
	private static String byteArrayToHexString(byte[] b){    
		StringBuffer resultSb = new StringBuffer();
		for (int i = 0; i < b.length; i++){
			resultSb.append(byteToHexString(b[i]));     
		}
		return resultSb.toString();
	}
	
	/** 将一个字节转化成十六进制形式的字符串     */     
	private static String byteToHexString(byte b){
		 int n = b;  
		 if (n < 0)
			 n = 256 + n;     
		 int d1 = n / 16; 
		 int d2 = n % 16;
		 return hexDigits[d1] + hexDigits[d2];
	}
	
	public static void main(String[] args) {
		 String pwd1="123";
		 String pwd2="";
		 
		 System.out.println("未加密的密码:"+pwd1);
		 pwd2 = MD5Util.generatePassword(pwd1);
		 System.out.println("加密后的密码:"+pwd2);
		 
		 System.out.print("验证密码是否正确:");
		 if(MD5Util.validatePassword(pwd2, pwd1)) {  
			 System.out.println("正确");    
		 }else{
			 System.out.println("错误");
		 }
	}
}
